package itheima03;
/*
    创建并开启线程的方式二
        步骤:
            1.定义Runnable接口的实现类
            2.Runnable接口的实现类覆盖重写run方法,指定线程任务
            3.创建Runnable接口的实现类对象
            4.创建Thread类的对象,传递Runnable接口的实现类对象
            5.Thread类的对象调用start方法,开启线程

    思考:
        既然可以创建Thread子类对象,开启线程,为什么还要有实现Runnable接口的方式呢?

        实现Runnable接口的方式的好处?
            1.避免了java中类的单继承的局限性
            2.降低了线程任务对象和线程对象之间的耦合性(事物之间的关系)
 */
public class Demo03ThreadImpl {
    public static void main(String[] args) {
        //3.创建Runnable接口的实现类对象

        //这里只是创建线程任务对象,和线程无关
        MyRunImpl task = new MyRunImpl();

        //4.创建Thread类的对象,传递Runnable接口的实现类对象
        //这里只是创建一个线程对象,要执行什么任务,就传递过来
        //传递的是什么任务,就执行什么任务
        Thread t1 = new Thread(task);
        Thread t2 = new Thread(task);

        //5.Thread类的对象调用start方法,开启线程
        t1.start();
        t2.start();
    }
}
